package com.aiwiown.snackmq.common.dto;

import com.aiwiown.snackmq.common.cluster.BrokerId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 用于在客户端和控制台之间传输主题信息的 DTO (Data Transfer Object)。
 * <p>
 * 之前版本的 DTO 结构与服务器端序列化的 JSON 不匹配，导致了 GSON 反序列化错误。
 * 这个版本修复了这个问题。
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TopicInfo {
    private int partitionCount;
    private int replicationFactor;
    private String topicName;
    private Map<Integer, PartitionAssignmentInfo> partitionAssignments;

    /**
     * 嵌套类，用于表示单个分区的分配信息。
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class PartitionAssignmentInfo {
        /**
         * 【核心修复】: 将 leader 字段的类型从 String 更改为 BrokerId。
         * 这与服务器端序列化的 JSON 结构（一个包含 host 和 port 的对象）相匹配。
         */
        private BrokerId leader;

        /**
         * 【核心修复】: 将 replicas 列表的泛型从 String 更改为 BrokerId。
         */
        private List<BrokerId> replicas;
    }
}